home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / kbdevnt.mod < prev    next >
Text File  |  1995-11-25  |  5KB  |  167 lines

  1. IMPLEMENTATION MODULE  KbdEvnt;
  2.  
  3. FROM SYSTEM     IMPORT VAL,ADDRESS,SHIFT,WORD,ADR,TSIZE;
  4. FROM Strings    IMPORT RightStr,EqualStr,Length,ClearStr,Concat,IsEmptyStr;
  5. FROM ConvertStr IMPORT IntToStr;
  6. FROM XBIOS104   IMPORT KeyTable,SetKeyTable, KeyTablePtr,KeyTrans,KeyTransPtr;
  7. FROM Chars      IMPORT CAPGerman;
  8. FROM GEMAESbase IMPORT Disabled,MenuSelected,
  9.                        Object,GraphicString,GraphicTitle;
  10. FROM AES        IMPORT ApplWrite;
  11. FROM EasyDialog IMPORT and,WorkTree,TreePROC;
  12.  
  13. VAR
  14.        laenge,ID           : INTEGER;
  15.        MessageBuffer       : ARRAY [0..7] OF INTEGER;
  16.        found               : BOOLEAN;
  17.        MenuString,
  18.        ScanString          : ARRAY [0..7] OF CHAR;
  19.        AsciiValue          : CHAR;
  20.  
  21.  
  22. PROCEDURE SearchMenuTree(MenuTree:ADDRESS; Index :INTEGER);
  23. VAR
  24.       MenuObject  : POINTER TO Object;
  25.       s           : POINTER TO  ARRAY [0..40] OF CHAR;
  26.       OK          : BOOLEAN;
  27. BEGIN
  28.         s:=ADR(MenuString);
  29.         MenuObject:=MenuTree+ VAL(ADDRESS,(Index*TSIZE(Object)));
  30.         IF (MenuObject^.type=GraphicString) AND ~and(MenuObject^.state,Disabled) THEN
  31.             s:=MenuObject^.spec;
  32.         END(*IF*);
  33.         RightStr(s^,laenge,MenuString,OK);
  34.         IF EqualStr(ScanString,MenuString)THEN
  35.            MessageBuffer[0]:=MenuSelected;
  36.            MessageBuffer[1]:=ID;
  37.            MessageBuffer[2]:=0;
  38.            MessageBuffer[3]:=3;
  39.            MessageBuffer[4]:=Index;
  40.            ApplWrite(ID,16,ADR(MessageBuffer));
  41.            found:=TRUE
  42.         END(*IF*);
  43. END SearchMenuTree;
  44.  
  45. PROCEDURE ConcatScanString(VAR ScanString : ARRAY OF CHAR;KeyState,
  46.                                Key :INTEGER);
  47. VAR pKeyTable :KeyTablePtr;
  48.     pKeyTa,KbdUnshift,KbdShift,KbdCapslock: KeyTransPtr;
  49.     CASsing             : ARRAY [1..1] OF CHAR;
  50.     CharStr             : ARRAY [1..1] OF CHAR;
  51.     OK                  : BOOLEAN;
  52.     scan                : INTEGER;
  53.     chr : CHAR;
  54. CONST
  55.       KSHIFT =3;(* Linke und/oder rechte Shifttaste*)
  56.       KALT   =8;(* Alternate Taste*)
  57.       KCTRL  =4;(* Control Taste*)
  58.  
  59. BEGIN
  60.     scan:=SHIFT(Key,-8);
  61.     ScanString:=0C;
  62.     (************ Tastaturtabelle holen**************************)
  63.     pKeyTa:=VAL(ADDRESS,-1);
  64.     pKeyTable:=SetKeyTable( pKeyTa, pKeyTa, pKeyTa);
  65.     KbdUnshift:=pKeyTable^.unshift;
  66.     KbdShift:=pKeyTable^.shift;
  67.     KbdCapslock:=pKeyTable^.capslock;
  68.  
  69.     (************* Scancode der Tastaturbelegung zuordnen*************)
  70.     IF ~and(KeyState,KSHIFT) THEN
  71.        chr:=CHR(VAL(INTEGER,KbdUnshift^[scan]));
  72.        chr:=CAPGerman(chr);
  73.        ScanString[0]:=' ';
  74.     ELSE
  75.        chr:=CHR(VAL(INTEGER,KbdShift^[scan]));
  76.        ScanString[0]:=CHR(1);
  77.     END(*IF*);
  78.  
  79.     CharStr[1]:=chr;
  80.     AsciiValue:=chr;
  81.     (***************** Zeichen für Shift, ctrl und alternate setzen******)
  82.     IF and(KeyState,KALT)  THEN
  83.        CASsing[1]:=CHR(7);
  84.        Concat(ScanString,CASsing,ScanString,OK);
  85.     END(*IF*);
  86.     IF and(KeyState,KCTRL) THEN
  87.        Concat(ScanString,'^',ScanString,OK);
  88.     END(*IF*);
  89.     (******************** Buchstaben oder Funktionstasten anfügen*********)
  90.     Concat(ScanString,CharStr,ScanString,OK);
  91.  
  92.     CASE scan OF
  93.        062H         :
  94.         Concat(ScanString,'HELP',ScanString,OK);
  95.        |061H       :
  96.         Concat(ScanString,'UNDO',ScanString,OK);
  97.        |01H        :
  98.         Concat(ScanString,'ESC',ScanString,OK);
  99.        |0EH       :
  100.         Concat(ScanString,'BSPC',ScanString,OK);
  101.        |053H        :
  102.         Concat(ScanString,'DEL',ScanString,OK);
  103.        |0FH        :
  104.         Concat(ScanString,'TAB',ScanString,OK);
  105.        |052H       :
  106.         Concat(ScanString,'INS',ScanString,OK);
  107.        |047H        :
  108.         Concat(ScanString,'HOME',ScanString,OK);
  109.  
  110.        |03BH,054H :
  111.         Concat(ScanString,'F1',ScanString,OK);
  112.        |03CH,055H :
  113.         Concat(ScanString,'F2',ScanString,OK);
  114.        |03DH,056H :
  115.         Concat(ScanString,'F3',ScanString,OK);
  116.        |03EH,057H :
  117.         Concat(ScanString,'F4',ScanString,OK);
  118.        |03FH,058H :
  119.         Concat(ScanString,'F5',ScanString,OK);
  120.        |040H,059H :
  121.         Concat(ScanString,'F6',ScanString,OK);
  122.        |041H,05AH :
  123.         Concat(ScanString,'F7',ScanString,OK);
  124.        |042H,05BH :
  125.         Concat(ScanString,'F8',ScanString,OK);
  126.        |043H,05CH :
  127.         Concat(ScanString,'F9',ScanString,OK);
  128.        |044H,05DH :
  129.         Concat(ScanString,'F10',ScanString,OK);
  130.     ELSE
  131.  
  132.     END;(*CASE*)
  133.  
  134. END ConcatScanString;
  135.  
  136. PROCEDURE MenuSearch(AppID:INTEGER; MenuTree:ADDRESS;KeyState,Key:INTEGER;
  137.                      VAR Taste:CHAR):BOOLEAN;
  138. VAR
  139.       scan,state          :INTEGER;
  140.       chr                 :CHAR;
  141.       CharStr             : ARRAY [0..0] OF CHAR;
  142.       LastObj,i           :CARDINAL;
  143.       search              :TreePROC;
  144.  
  145.  
  146. BEGIN
  147.     i:=0;
  148.     ID:=AppID;
  149.     LastObj:=0;
  150.     ClearStr(MenuString);
  151.     ClearStr(ScanString);
  152.     MenuString:=' ';
  153.     ScanString:=' ';
  154.     found:=FALSE;
  155.     search:=SearchMenuTree;
  156.     ConcatScanString(ScanString,KeyState,Key);
  157.     Taste:=AsciiValue;
  158.     laenge:=Length(ScanString);
  159.     IF IsEmptyStr(ScanString) THEN
  160.        RETURN FALSE;
  161.     END(*IF*);
  162.     WorkTree(MenuTree,0,0,search);
  163.     RETURN found;
  164. END MenuSearch;
  165.  
  166. END KbdEvnt.
  167.